/*
 * Copyright (C) 2012 POAS.VSTU
 */
package ui;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.*;
import java.util.Collection;
import java.util.IdentityHashMap;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import model.*;


/**
 * Игровая панель игры, в пределах которой идет игровой процесс и перемещаются карты
 * @author POAS
 */
public class UIGamePanel extends JPanel implements
        MouseListener,
        MouseMotionListener,
        ChangeListener,
        ActionListener,
        GameEventListener {
    
    // Константы определяющие первоначальные позиции элементов
    private static final int DISPLAY_WIDTH = 700;
    private static final int DISPLAY_HEIGHT = 500;
    // ... ещё много других констант: отступы, интервалы, позиции
    
    // Константы, определяющие внешний вид
    private static final Color BACKGROUND_IMAGE = null;
    // ...
    
    private GameModel mModel;
    private UICardPileRecycle mCardPileRecycle; // Отбой
    private UICardPileKitty mCardPileKitty;     // Кон
    private UICardStack mCardStack;             // Колода карт
    private UICardPile mExtraCardPile;          // Карта, которая не раздается игрокам
    
    // Игроков добавить
    
    // Колоды карт "на руках" игроков, начиная от пользователя по часовой стрелке
    private Collection<UIPlayer> mPlayers;
    
    public UIGamePanel() { 

    }
    
    /** Получить модель игры */
    public GameModel getModel() {
        return mModel;
    }
    
    /** Получить ширину игрового поля */
    public int getWidth() {
        return DISPLAY_WIDTH;
    }
    
    /** Получить высоту игрового поля */
    public int getHeight() {
        return DISPLAY_HEIGHT;
    }
  
    
    /**
     * Управление возможностью воздействовать на игровое поле игроком
     * @param isEnabled - true, чтобы игроку были доступны все действия над игровым полем  
     */
    private void enableUserActions(boolean isEnabled) {}
    

    /**
     * Переместить карты от игрока на кон
     * @param cards
     * @param player 
     */
    private void moveCardsFromPlayerToKitty(Card[] cards, Player player) {;}
    
    /**
     * Перепестить карты от игрока в отбой
     * @param cards
     * @param player 
     */
    private void moveCardsFromPlayerToRecylce(Card[] cards, Player player) {;}
    
    /**
     * Переместить карту из колоды в поле лишней карты
     * @param cards 
     */
    private void moveCardsFromStackToExtra(Card card) {;}
    
    /**
     * Передвинуть карты из колоды к игроку
     * @param cards
     * @param player 
     */
    private void moveCardsFromStackToPlayer(Card[] cards, Player player) {;}
    
    /**
     * Переместить карты из кона к игроку
     * @param cards
     * @param player 
     */
    private void moveCardsFromKittyToPlayer(Card[] cards, Player player) {;}
    
    

    @Override
    public void mouseClicked(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mousePressed(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void stateChanged(ChangeEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override 
    public void actionPerformed(ActionEvent e) {
        throw new UnsupportedOperationException("Not supported yet."); 
    }

    @Override
    public void cardsMoved(GameEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
}